package main
import (
	"fmt"
)
//面向对象编程——继承
//多重继承情况
type A struct{
	Name string
	Age int
}
type B struct{
	Name string
	Height float64
}
type C struct{
	A
	B 
}
//嵌套 有名结构体  即为“ 组合关系 ”
type D struct{
	a A //有名结构体，所有不能通过 d.Name/d.Age直接访问它的属性或方法，必须带上 d.a.Name 
}
//当基础数据类型作为匿名字段时，可以直接使用
type E struct{
	A 
	int  //匿名字段，但是不能多个相同的匿名字段！！！！！
}
func main(){
	var c C
	//c.Name = "fmx"  //这样会报错，因为它不知道是A的Name还是B的Name，如果C中有Name，则不会报错
	c.A.Name = "fmx"
	c.B.Name = "lsx"
	c.Height = 180
	fmt.Println(c)

	var d D 
	d.a.Name = "xiaolaomei"  //如果写成 d.Name和d.Age就会报错，因为不是匿名结构体，必须带上有名结构体的名字： a 
	d.a.Age = 22
	fmt.Println("D : ",d)

	var e E 
	e.Name = "LR"
	e.Age = 21
	e.int = 300
	fmt.Println("E : ",e)
}

func (c C)String()string{
	s := fmt.Sprintf("c.A.Name :%v、c.B.Name :%v、c.A.Age :%v、c.B.Height :%v！",c.A.Name,c.B.Name,c.A.Age,c.B.Height)
	return s
}